package jfxtras.icalendarfx.property.component;
import static org.junit.Assert.assertEquals;
import java.time.DateTimeException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.junit.Test;
import jfxtras.icalendarfx.parameters.AlarmTriggerRelationship;
import jfxtras.icalendarfx.parameters.AlarmTriggerRelationship.AlarmTriggerRelationshipType;
import jfxtras.icalendarfx.properties.ValueType;
import jfxtras.icalendarfx.properties.component.alarm.Trigger;
public class TriggerTest
{
@Test
public void canParseTrigger1()
{
String expectedContent = "TRIGGER:-PT15M";
Trigger<Duration> madeProperty = Trigger.parse(expectedContent);
assertEquals(expectedContent, madeProperty.toString());
assertEquals(Duration.ofMinutes(-15), madeProperty.getValue());
}
@Test
public void canBuildTrigger1()
{
Trigger<Duration> madeProperty = new Trigger<Duration>(Duration.ofMinutes(5))
.withAlarmTrigger(new AlarmTriggerRelationship(AlarmTriggerRelationshipType.END));
String expectedContent = "TRIGGER;RELATED=END:PT5M";
assertEquals(expectedContent, madeProperty.toString());
assertEquals(Duration.ofMinutes(5), madeProperty.getValue());
assertEquals(AlarmTriggerRelationshipType.END, madeProperty.getAlarmTrigger().getValue());
}
@Test
public void canBuildTrigger2()
{
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("Z"));
Trigger<ZonedDateTime> madeProperty = new Trigger<ZonedDateTime>(d);
String expectedContent = "TRIGGER;VALUE=DATE-TIME:20160306T043000Z";
assertEquals(expectedContent, madeProperty.toString());
}
@Test
public void canParseTrigger2()
{
String expectedContent = "TRIGGER;VALUE=DATE-TIME:20160306T043000Z";
Trigger<ZonedDateTime> madeProperty = Trigger.parse(ZonedDateTime.class, expectedContent);
assertEquals(expectedContent, madeProperty.toString());
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("Z"));
assertEquals(d, madeProperty.getValue());
}
@Test (expected=IllegalArgumentException.class)
public void canCatchInvalidTypeChange()
{
new Trigger<Duration>(Duration.ofMinutes(5))
.withAlarmTrigger(new AlarmTriggerRelationship(AlarmTriggerRelationshipType.END))
.withValueType(ValueType.DATE_TIME); // invalid type
}
@Test (expected=IllegalArgumentException.class)
public void canCatchInvalidRelationship()
{
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("Z"));
new Trigger<ZonedDateTime>(d)
.withAlarmTrigger(new AlarmTriggerRelationship(AlarmTriggerRelationshipType.END)); // not allowed for DATE-TIME value type
}
@Test (expected=DateTimeException.class)
public void canCatchNonUTCZone()
{
ZonedDateTime d = ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("America/Los_Angeles"));
new Trigger<ZonedDateTime>(d);
}
@Test (expected=IllegalArgumentException.class)
public void canCatchInvalidParameterizedType()
{
Trigger.parse(Integer.class, "123"); // only TemporalAmount and ZonedDateTime accepted
}
@Test (expected=DateTimeException.class)
public void canCatchTypeContentMismatch()
{
Trigger.parse(ZonedDateTime.class, "TRIGGER;RELATED=END:PT5M");
}
@Test (expected=DateTimeException.class)
public void canCatchTypeContentMismatch2()
{
Trigger.parse(Duration.class, "TRIGGER;VALUE=DATE-TIME:20160306T043000Z");
}
}